『詳解 Terraform 第3版』
https://gyazo.com/04b1c7edbcf42a2a1b0f2a070672ca4d
2023/11/21
動機
IaC全く知らんのでそのへんの概要を知りたい
Terraformかどうかは別になんでも良い
感想
かなり良い本だmrsekut.icon
IaCを触れたことがない人にとって良い
もしかするとインフラ入門としても良いかもしれない
実際に手を動かしてAWSとTerraformに触れられる
かなり行間が小さく、構成や翻訳も文句なく、かなり読みやすい
トップダウンに解説が続く
最初に作ったものを使い回すので、前の章から手を動かして読むのが良い
はじめに
あー、DevOpsの話につながってくるのかmrsekut.icon
DevOpsの本も適当に1冊読んでおいたほうが良いかもしれない
いやこの本の中でDevOpsについても触れるのか
この辺について答えてくれるらしい
なぜIaC(Infrastructure as Code)を使うのか?
設定管理(configuration management)、オーケストレーション(orchestration)、プロビジョニング(provisioning)、サーバテンプレーティング(server templating)のそれぞれの違いは?
Terraform、Chef、Ansible、Puppet、Salt、CloudFormation、Docker、Packer、Kubernetesといった仕組みはどのような時に使うべきなのか?
Terraformはどのように動作し、どのようにインフラを管理するのか?
再利用可能なTerraformモジュールの使い方は?
Terraformを使うときセキュアにシークレットを管理するには?
Terraformを複数リージョン、複数アカウント、複数クラウド上で使うには?
本番での使用に耐えうる信頼性のあるTerraformコードを書くにはどうしたらいいのか?
Terraformコードをテストする方法は?
Terraformを自動デプロイプロセスの一部に組み込む方法は?
チームでTerraformを使うベストプラクティスは?
IaCの整理とてもよかったmrsekut.icon 大まかな分類や責務を分けたおかげでどのツール同士が類似なのかが判別できるようになった
1.5 Terraformと他のIaCツールとはどう違うのか
いろんな軸で比較
この辺はだいたいプロビジョニングツールの方が勝っていそう
設定管理ツールか、プロビジョニングツールか
ミュータブルなインフラか、イミュータブルなインフラか
手続き的、宣言的
汎用言語、DSL
マスタ、マスタレス
エージェントの有無
有償、無償
コミュニティの大きさ
成熟度合い
2章 Terraformをはじめよう
AWSとTerraformのチュートリアル
こんなに一瞬でEC2インスタンス立てられるの!?てぐらい簡単だったmrsekut.icon
ただ、コンソールを見た時に、EC2インスタンス一覧に表示されてなくて最初焦った
別のprofileを読んで業務の方にデプロイしてしまったのかと思った
コンソールの右上で指定したregionのものしか一覧に表示されないのねmrsekut.icon
コンソールで見てたregionとデプロイ先のregionが異なるだけだった
この章の内容だと、再デプロイ時にダウンタイムが発生する
5章で改善するらしい
新たに触れるやつ
ec2, auto scaling group, alb
3章 Terraformステートを管理する
どのようにチームメンバと共有するか
どのようなディレクトリ構成にするか
新たに触れるやつ
s3, rds, dynamoDB
4章 モジュールで再利用可能なインフラを作る
通常のアプリケーションを書く時と異なる考え方をしないといけない部分が多々あって難しいと、同時に、そのへんを解説してくれてるのありがたいmrsekut.icon
5章 Terraformを使うためのヒントとコツ:ループ、条件分岐、デプロイ、その他つまずきポイント
ループ
条件分岐
ゼロダウンタイムデプロイ
新たに触れるやつ
iam
5.4 Terraformのつまずきポイント有用だmrsekut.icon
6章 シークレットを管理する
6.1 シークレット管理の基本
6.2 シークレット管理ツール
6.2.1 保存するシークレットの種類
6.2.2 シークレットの保存方法
6.2.3 シークレットにアクセスするインタフェイス
6.2.4 シークレット管理ツールの比較
6.3 シークレット管理ツールとTerraform
6.3.1 プロバイダ
6.3.2 リソースとデータソース
6.3.3 ステートファイルとプランファイル
6.4 まとめ
7章 複数のプロバイダを使う
7.1 1つのプロバイダを使う
7.1.1 プロバイダとは何か
7.1.2 プロバイダをどのようにインストールするのか
7.1.3 プロバイダをどのように使うのか
7.2 同じプロバイダのコピーを複数使う
7.2.1 複数のAWSリージョンを使う
7.2.2 複数のAWSアカウントを使う
7.2.3 複数のプロバイダを使えるモジュールを作る
7.3 異なる複数のプロバイダを使う
7.3.1 Docker短期集中コース
7.3.3 Elastic Kubernetes Service(Amazon EKS)を使ったAWSへのDockerコンテナのデプロイ 7.4 まとめ
8章 本番レベルのTerraformコード
本番のインフラを作る期間のあるある
AWS Relational Database Service(RDS)を使ったMySQLのような、サードパーティの完全にマネージドなサービスをデプロイする場合、本番環境でサービスが使用できるようにするまで1週間から2週間。
ローカルに一切データを保存しない(全データをRDSに保存するなど)Node.jsのクラスタなどステートレスな分散アプリケーションをAWS Auto Scalingグループ(ASG)上で動かすなら、およそ2倍、つまり2週間から4週間。
ASG上で動作しローカルディスクにデータを保存するElasticsearchクラスタのようなステートフルな分散アプリケーションを自前で動かすなら、1桁違う時間、つまり本番環境で使用できるようにするまでおよそ2か月から4か月。
アプリケーション、データストア、ロードバランサ、監視、アラート、セキュリティなどすべてのアーキテクチャを構築するなら、さらに1桁あるいは2桁違う時間、つまり6か月から36か月。小さな会社なら通常6か月に近い期間、大企業なら通常数年。
ひょえ~、そんなにかかるのmrsekut.icon
確かにめっちゃ多い
9章 Terraformのコードをテストする
9.1 手動テスト
9.1.1 手動テストの基礎
9.1.2 テスト後の後片付け
9.2 自動テスト
9.2.1 ユニットテスト
9.2.2 統合テスト
9.2.3 E2Eテスト
9.2.4 その他のテスト手法
9.3 まとめ
10章 チームでTerraformを使う
すごい。技術書に説得の方法が書いているmrsekut.icon*2 めっちゃ重要なことが書いている
チームで学ぶ時間を取らないといけない
一人だけIaCが書けるだけでいけない
障害が起きた時に、それを書いたことがない人は手動で対応する
そうするとコードと実装がズレて使い物にならなくなり、コードはごみになる
付録A 参考文献
A.1 書籍
A.2 ブログ
A.3 講演
A.4 ニュースレター
A.5 オンラインフォーラム
訳者あとがき
索引